/* eslint-disable */
let isAndroid = navigator.userAgent.indexOf('Android') > -1 || navigator.userAgent.indexOf('Adr') > -1
let isiOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)

// 这是必须要写的，用来创建一些设置
function setupWebViewJavascriptBridge (callback) {
  // Android使用
  if (isAndroid) {
    if (window.WebViewJavascriptBridge) {
      callback(WebViewJavascriptBridge)
    } else {
      document.addEventListener(
        'WebViewJavascriptBridgeReady',
        function () {
          callback(WebViewJavascriptBridge)
        },
        false
      )
    }
    console.log('tag', '安卓')
    sessionStorage.phoneType = 'android'
  }

  // iOS使用
  if (isiOS) {
    if (window.WebViewJavascriptBridge) {
      return callback(WebViewJavascriptBridge)
    }
    if (window.WVJBCallbacks) {
      return window.WVJBCallbacks.push(callback)
    }
    window.WVJBCallbacks = [callback]
    var WVJBIframe = document.createElement('iframe')
    WVJBIframe.style.display = 'none'
    WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__'
    document.documentElement.appendChild(WVJBIframe)
    setTimeout(function () {
      document.documentElement.removeChild(WVJBIframe)
    }, 0)
    console.log('tag', 'ios')
    sessionStorage.phoneType = 'ios'
  }
}
//Android>=1100 不需要
// 注册回调函数，第一次连接时调用 初始化函数(android需要初始化,ios不用)
//setupWebViewJavascriptBridge(function (bridge) {
//  if (isAndroid) {
//    //新版本不需要 初始化
//    bridge.init(function (message, responseCallback) {
//      var data = {
//        'Javascript Responds': 'Wee!'
//      }
//      responseCallback(data)
//    })
//  }
//})


export default {
  // js调APP方法 （参数分别为:app提供的方法名  传给app的数据  回调）
  callHandler (name, data, callback) {
    setupWebViewJavascriptBridge(function (bridge) {

        //Android>=1100 ---start
        var message = {
      		'name': name,
      		'data': data
        }

        if (callback && typeof callback === 'function') { // 支持回调
            var key = generateCallbackKey() // 生成回调key
            mapCallbacks[key] = { 'callback': callback }
            message['callback'] = key
        }
        bridge.callHandler(JSON.stringify(message))
        //Android>=1100---end

        //老版本 Android<1100 这里区分下版本号
//        bridge.callHandler(name, data, callback)
    })
  },

  // APP调js方法 （参数分别为:js提供的方法名  回调）
  registerHandler (name, callback) {
    setupWebViewJavascriptBridge(function (bridge) {

        //Android>=1100 ---start
        var message = {
            'name': name
        }
        if (callback && typeof callback === 'function') { // 支持回调
            var key = generateCallbackKey() // 生成回调key
            mapCallbacks[key] = { 'callback': callback }
            message['callback'] = key
        }
        bridge.registerHandler(JSON.stringify(message))
        //Android>=1100---end

        //老的方法
//      bridge.registerHandler(name, function (data, responseCallback) {
//        callback(data, responseCallback)
//      })

    })
  }
}

// Android>=1100 添加代码---start
//function map
var mapCallbacks = {};

var postBridgeCallback = function(key, data){
    console.log('jsBridge postBridgeCallback', 'callback: ' + key)

    var obj = mapCallbacks[key];
    if(obj.callback){
        obj.callback(data);
        delete mapCallbacks[key];
    }else{
        console.log('jsBridge postBridgeCallback', 'callback not found: ' + key)
    }
}
//挂载回调函数
window.postBridgeCallback = postBridgeCallback;

// 生成回调key
function generateCallbackKey(){
    return "bridgeCallback_" + new Date().getTime() + "_" + randomCode();
}

// 随机码 防止并发重复
function randomCode(){
    var code = ""
    for(var i = 0; i < 6; i++){
        code += Math.floor(Math.random() * 10)
    }
    return code;
}
// Android>=1100 添加代码---end